package com.zhihuishu.micro.course.dao;

import com.github.abel533.mapper.Mapper;
import com.zhihuishu.micro.course.model.CourseVideoForBatis;
import com.zhihuishu.micro.course.model.Lesson;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 
 * @author zhanglikun
 * @date 2015年10月28日 下午2:09:01
 */
public interface LessonMapper extends Mapper<Lesson> {

    void save(Lesson lesson);

    void remove(int lessonId);

    void update(Lesson lesson);

    void overwriteVideoInfo(Lesson lesson);

    Lesson get(int lessonId);

    List<Lesson> getList(List<Integer> listLessonIds);

    List<Integer> list(int chapterId);

    List<Integer> listByCourseId(int courseId);

    List<Lesson> findLessonlistByChapterId(Integer chapterId);

    /**
     * 根据章ID列表，查询视频数(不包含有子节部分)
     * 
     * @param chapterIds
     * @return
     */
    int countVideos(@Param("chapterIds")
    List<Integer> chapterIds);

    /**
     * 根据课程ID集合获取节
     * 
     * @author ztl
     * @param courseIds
     * @return
     */
    List<CourseVideoForBatis> getLessonByCourseIds(@Param("courseIds")
    List<Long> courseIds);

    /**
     * 根据章ID获取节列表
     * 
     * @author ztl
     * @param chapterId
     * @return
     */
    List<Lesson> getLessonListFromDb(@Param("chapterId")
    Integer chapterId);

    void sort(List<Lesson> lessons);

    /**
     * @Description:查询指定章下指定序号后面的节
     * @date:@2016年12月8日下午1:21:38
     * @author:嵇鹏
     * @Param:
     * @retuen:List<Lesson>
     */
    List<Integer> queryLessonsByChapterIdAndOrderNumber(@Param("chapterId")
    Integer chapterId, @Param("orderNumber")
    Integer orderNumber);

    void updateMinusOrderByChapterIdAndLessonOrderNumber(@Param("chapterId")
    Integer chapterId, @Param("orderNumber")
    Integer orderNumber);

    List<Integer> queryLessonIdsContainSmallOrder(@Param("chapterId")
    Integer chapterId, @Param("targetRankSmall")
    int targetRankSmall, @Param("orginRankBig")
    int orginRankBig);

    void updatePlusLessonOrderContainSmallOrder(@Param("chapterId")
    Integer chapterId, @Param("targetRankSmall")
    int targetRankSmall, @Param("orginRankBig")
    int orginRankBig);

    List<Integer> queryLessonIdsContainsBigOrder(@Param("chapterId")
    Integer chapterId, @Param("targetRankBig")
    int targetRankBig, @Param("orginRankSmall")
    int orginRankSmall);

    void updateMinusLessonOrderContainBigOrder(@Param("chapterId")
    Integer chapterId, @Param("targetRankBig")
    int targetRankBig, @Param("orginRankSmall")
    int orginRankSmall);

    /**
     * @Description:清除节上关于视频的信息
     * @date:@2016年12月9日下午1:27:41
     * @author:嵇鹏
     * @param lessonVideoCount
     * @Param:
     * @retuen:void
     */
    void updateLessonVideoInfoAndChildCount(@Param("lessonId")
    Integer lessonId, @Param("lessonVideoCount")
    int lessonVideoCount);

    /**
     * @Description:查询章下最大的排序序号
     * @date:@2016年12月16日上午10:44:46
     * @author:嵇鹏
     * @Param:
     * @retuen:int
     */
    int queryMaxLessonSortOfChapter(Integer chapterId);

    /**
     * @Description:为了完整度检查 查询节的必要信息
     * @date:@2016年12月19日上午9:43:43
     * @author:嵇鹏
     * @Param:
     * @retuen:List<Lesson>
     */
    List<Lesson> selectInfoForCompCheck(Integer chapterId);

    /**
     * @Description:查询章下所有节
     * @date:@2016年12月27日上午11:34:11
     * @author:嵇鹏
     * @Param:
     * @retuen:List<Integer>
     */
    List<Integer> queryLessonIdsByChapterId(Integer chapterId);

    /**
     * @Description:
     * @date:@2017年1月12日下午3:08:56
     * @author:嵇鹏
     * @Param:
     * @retuen:List<Integer>
     */
    List<Integer> queryLessonIdsByCourseId(long courseId);
    
    /**
     * @Description:根据课程id查询节id
     *  @date:@2017年3月3日上午11:23:34
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> getlessonIdsByCourseId(long courseId);

}
